import pandas as pd


class Test:
    path = None
    # 定义要提取的列名（这里根据你提供的内容）
    extract_columns = []

    # 新增一个属性用于存储所有工作表的数据，字典形式，键为工作表名称，值为对应的数据
    all_sheet_data = {}

    def __init__(self, path):
        self.path = path
        # self.all_sheet_data={'计算机网络','数据库原理及应用','Windows应用及安全','弹性交换网络','物联网工程导论','大中型园区网络','Java基础编程'}
        self.dateJoined()

    def dateJoined(self):
        try:
            all_sheet_data_dict = pd.read_excel(self.path, sheet_name=None)
            for sheet_name, sheet_data in all_sheet_data_dict.items():
                self.all_sheet_data[sheet_name] = sheet_data
        except FileNotFoundError:
            print(f"文件 {self.path} 不存在，请检查文件路径是否正确。")
        except pd.errors.ParserError:
            print(f"文件 {self.path} 可能存在格式问题，无法正确解析。")


    def print_all_sheet_data(self):
        nodes=[]
        key=[3,4,5,6,7,9]
        for sheet_name, sheet_data in self.all_sheet_data.items():
            listName=[]
            for i in  key:
                listName.append( sheet_data.keys()[i])
            node=Node(sheet_name, listName)
            for index, row in sheet_data.iterrows():
                node.math(row)
            nodes.append(node)
        return  nodes

    def get_each_row_data(self):
        """
        获取每个工作表中的每一条数据（每一行数据）
        """
        all_rows_data = []
        for sheet_name, sheet_data in self.all_sheet_data.items():
            for index, row in sheet_data.iterrows():
                # 将每一行数据转换为字典形式（以列名作为键，对应的值作为值），方便查看和处理
                row_dict = row.to_dict()
                row_dict['工作表名称'] = sheet_name
                all_rows_data.append(row_dict)

        return all_rows_data

    def write_to_excel(self,classes):
        all_data = []
        for cls in classes:
            # 先添加class名称行
            all_data.append([cls.name])
            # 处理每个listName和对应的date字典
            for index in range(len(cls.listName)):
                title = cls.listName[index]
                data_dict = cls.date[index]
                row_data = [title]
                # 添加date字典的键名
                row_data.extend(data_dict.keys())
                # 添加date字典的值
                row_data.extend(data_dict.values())
                all_data.append(row_data)
            # 添加间隔的两行空行
            all_data.extend([[], []])

            # 创建DataFrame，设置列名（根据第一个类的数据结构来生成通用列名）
        columns = ["Class Name"]
        used_column_names = set()  # 用于记录已经使用过的列名，确保唯一性
        used_column_names.add("Class Name")
        for cls in classes:
            for index in range(len(cls.listName)):
                key_name = f"{cls.listName[index]} Key"
                value_name = f"{cls.listName[index]} Value"
                if key_name not in used_column_names:
                    columns.append(key_name)
                    used_column_names.add(key_name)
                if value_name not in used_column_names:
                    columns.append(value_name)
                    used_column_names.add(value_name)

        df = pd.DataFrame(all_data, columns=columns)
        # 后续将数据写入Excel文件的代码保持不变
        df.to_excel("example.xlsx", index=False)


class Node:
     name=None
     date=[]
     listName=None
     #一定要对数据初始化，不然数据将是static
     def __init__(self,name,listName):
         self.date=[{},{},{},{},{},{}]
         self.name=name
         self.listName=listName
     def math(self,i):
        key=[3,4,5,6,7,9]
        l=0;
        if len(i)==0:
             return 0
        output_data = [i.iloc[t] for t in key if t < len(i)]
        for j in range(6):
            if self.date[l].get(output_data[j]) is None:
                self.date[l][output_data[j]] = 1
            else:
                self.date[l][output_data[j]] += 1
            l+=1











if __name__ == '__main__':
    path=r"C:\\Users\\21556\\Downloads\\课程满意度报表原始数据.xlsx"
    test=Test(path)
    node=test.print_all_sheet_data()
    test.write_to_excel(node)
    for i in node:
        print(i.listName,"\n")
        print(i.date,"\n\n")
